@echo off

:: 获取当前bat文件所在目录的绝对路径作为当前目录
for /f "delims=" %%a in ('cd') do set current_dir=%%a

cd %current_dir%
:: 输出目录

:: golang输出目录
set "go_out=%current_dir%\..\server"
:: golang输出消息号
set "go_outmap=%go_out%\messages"
:: golang输出消息号bige
set "go_outmapbige=%current_dir%\..\gobigework\gobige\msgdef\protomsg"
:: C#输出目录
set "cs_outmap=%current_dir%\scharp"

:: proto原文件目录
set "proto_dir=%current_dir%\demo"
set "gobige_dir=%current_dir%\gobige"
set "include_dir=%current_dir%\include"
set "grpc_dir=%current_dir%\grpc"

:: 将tools/protoc路径添加到PATH环境变量中
set "tools_dir=%current_dir%\tools\protoc"
set "gen_dir=%current_dir%\tools\genprotomap"
set "path=%tools_dir%;%gen_dir%;%path%"

:: 调用protoc命令进行编译
protoc --proto_path="%proto_dir%;%gobige_dir%;%include_dir%" --go_out="%go_outmap%" --go_opt="paths=source_relative" "%proto_dir%\*.proto"
@REM :: 调用protoc命令进行编译bige消息
@REM protoc --proto_path="%proto_dir%;%gobige_dir%;%include_dir%" --go_out="%go_outmapbige%" --go_opt="paths=source_relative" "%gobige_dir%\*.proto"

del "%cs_outmap%\*.pb.cs"

:: C# 输出目录
protoc --proto_path="%proto_dir%;%gobige_dir%;%include_dir%" --csharp_out="%cs_outmap%" "%proto_dir%\*.proto"
:: C# 输出bige消息
@REM protoc --proto_path="%proto_dir%;%gobige_dir%;%include_dir%" --csharp_out="%cs_outmap%" "%gobige_dir%\*.proto"
:: C# 输出include消息 这个文件生成后需要修改一下，把出错的东西都删了。放进工程里后就可以了。以后都不用再生成了。
@REM protoc --proto_path="%proto_dir%;%gobige_dir%;%include_dir%" --csharp_out="%cs_outmap%" "%include_dir%\*.proto"

:: C# 生成代码的脚本 需要安装 dotnet tool install --global protobuf-net.Protogen
:: 参考库：https://github.com/protobuf-net/protobuf-net
for %%f in ("%cs_outmap%\*.cs") do (
    if exist "%cs_outmap%\%%~nf.pb.cs" del "%cs_outmap%\%%~nf.pb.cs"
    ren "%cs_outmap%\%%~nf.cs" "%%~nf.pb.cs"
)

@REM for %%f in ("%proto_dir%\*.proto") do (
@REM     protogen --proto_path="%proto_dir%" --proto_path="%gobige_dir%" --proto_path="%include_dir%" "%%~nxf" --csharp_out="%cs_outmap%"
@REM     @REM if exist "%cs_outmap%\%%~nf.pb.cs" del "%cs_outmap%\%%~nf.pb.cs"
@REM     @REM ren "%cs_outmap%\%%~nf.cs" "%%~nf.pb.cs"
@REM )
@REM for %%f in ("%gobige_dir%\*.proto") do (
@REM     protogen --proto_path="%proto_dir%" --proto_path="%gobige_dir%" --proto_path="%include_dir%" "%%~nxf" --csharp_out="%cs_outmap%"
@REM     if exist "%cs_outmap%\%%~nf.pb.cs" del "%cs_outmap%\%%~nf.pb.cs"
@REM     ren "%cs_outmap%\%%~nf.cs" "%%~nf.pb.cs"
@REM )

:: 生成 Go 代码对应的 Map
genprotomap -dir "%proto_dir%" -gofile "%go_outmap%\init.go" -csfile "%cs_outmap%\gameMap.pb.cs"
:: -luafile "%current_dir%\proto1.lua"
:: 生成 Go 代码对应的 Map bige
genprotomap -dir "%gobige_dir%" -csfile "%cs_outmap%\bigeMap.pb.cs"
:: -gofile "%go_outmapbige%\init.go"
:: -luafile "%current_dir%\proto2.lua"

:: 生成 Go Grpc 代码
protoc --proto_path="%proto_dir%;%gobige_dir%;%include_dir%;%grpc_dir%" --go-grpc_out="%go_outmap%" --go-grpc_opt="paths=source_relative" --go_out="%go_outmap%" --go_opt="paths=source_relative" "%grpc_dir%\*.proto"